<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">

	<title>ASCollectionDataSource Protocol Reference</title>

	<link rel="stylesheet" href="../css/style.css">
	<meta name="viewport" content="initial-scale=1, maximum-scale=1.4">
	<meta name="generator" content="appledoc 2.2.1 (build 1334)">
</head>
<body class="appledoc">
	<header>
		<div class="container" class="hide-in-xcode">
			
			<h1 id="library-title">
				<a href="../index.html">  </a>
			</h1>

			<p id="developer-home">
				<a href="../index.html">AsyncDisplayKit</a>
			</p>
			
		</div>
	</header>

	<aside>
		<div class="container">
			<nav>
				<ul id="header-buttons" role="toolbar">
					<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>

					<li id="on-this-page" role="navigation">
						<label>
							On This Page

							<div class="chevron">
								<div class="chevy chevron-left"></div>
								<div class="chevy chevron-right"></div>
							</div>

							<select id="jump-to">
	<option value="top">Jump To&#133;</option>
	
	<option value="overview">Overview</option>
	

	
	
	<option value="tasks">Tasks</option>
	
	

	
	

	

	
	<optgroup label="Instance Methods">
		
		<option value="//api/name/collectionNode:contextForSection:">- collectionNode:contextForSection:</option>
		
		<option value="//api/name/collectionNode:nodeBlockForItemAtIndexPath:">- collectionNode:nodeBlockForItemAtIndexPath:</option>
		
		<option value="//api/name/collectionNode:nodeForItemAtIndexPath:">- collectionNode:nodeForItemAtIndexPath:</option>
		
		<option value="//api/name/collectionNode:nodeForSupplementaryElementOfKind:atIndexPath:">- collectionNode:nodeForSupplementaryElementOfKind:atIndexPath:</option>
		
		<option value="//api/name/collectionNode:numberOfItemsInSection:">- collectionNode:numberOfItemsInSection:</option>
		
		<option value="//api/name/collectionView:nodeBlockForItemAtIndexPath:">- collectionView:nodeBlockForItemAtIndexPath:</option>
		
		<option value="//api/name/collectionView:nodeForItemAtIndexPath:">- collectionView:nodeForItemAtIndexPath:</option>
		
		<option value="//api/name/collectionView:nodeForSupplementaryElementOfKind:atIndexPath:">- collectionView:nodeForSupplementaryElementOfKind:atIndexPath:</option>
		
		<option value="//api/name/collectionViewLockDataSource:">- collectionViewLockDataSource:</option>
		
		<option value="//api/name/collectionViewUnlockDataSource:">- collectionViewUnlockDataSource:</option>
		
		<option value="//api/name/numberOfSectionsInCollectionNode:">- numberOfSectionsInCollectionNode:</option>
		
	</optgroup>
	
	
</select>
						</label>
					</li>
				</ul>
			</nav>
		</div>
	</aside>

	<article>
		<div id="overview_contents" class="container">
			<div id="content">
				<main role="main">
					<h1 class="title">ASCollectionDataSource Protocol Reference</h1>

					
					<div class="section section-specification"><table cellspacing="0"><tbody>
						<tr>
	<th>Conforms to</th>
	<td><a href="../Protocols/ASCommonCollectionDataSource.html">ASCommonCollectionDataSource</a></td>
</tr><tr>
	<th>Declared in</th>
	<td>ASCollectionNode.h</td>
</tr>
						</tbody></table></div>
					

                    
					
					<div class="section section-overview">
						<a title="Overview" name="overview"></a>
						<h2 class="subtitle subtitle-overview">Overview</h2>
						<p>This is a node-based UICollectionViewDataSource.</p>
					</div>
					
					

					
					
					<div class="section section-tasks">
						<a title="Tasks" name="tasks"></a>
						

						
						

						<div class="task-list">
							<div class="section-method">
	<a name="//api/name/collectionNode:numberOfItemsInSection:" title="collectionNode:numberOfItemsInSection:"></a>
	<h3 class="method-title"><code><a href="#//api/name/collectionNode:numberOfItemsInSection:">&ndash;&nbsp;collectionNode:numberOfItemsInSection:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Asks the data source for the number of items in the given section of the collection node.</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (NSInteger)collectionNode:(ASCollectionNode *)<em>collectionNode</em> numberOfItemsInSection:(NSInteger)<em>section</em></code></div>

		    
			

			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/numberOfSectionsInCollectionNode:" title="numberOfSectionsInCollectionNode:"></a>
	<h3 class="method-title"><code><a href="#//api/name/numberOfSectionsInCollectionNode:">&ndash;&nbsp;numberOfSectionsInCollectionNode:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Asks the data source for the number of sections in the collection node.</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (NSInteger)numberOfSectionsInCollectionNode:(ASCollectionNode *)<em>collectionNode</em></code></div>

		    
			

			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/collectionNode:nodeBlockForItemAtIndexPath:" title="collectionNode:nodeBlockForItemAtIndexPath:"></a>
	<h3 class="method-title"><code><a href="#//api/name/collectionNode:nodeBlockForItemAtIndexPath:">&ndash;&nbsp;collectionNode:nodeBlockForItemAtIndexPath:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Similar to -collectionNode:nodeForItemAtIndexPath:
This method takes precedence over collectionNode:nodeForItemAtIndexPath: if implemented.</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)<em>collectionNode</em> nodeBlockForItemAtIndexPath:(NSIndexPath *)<em>indexPath</em></code></div>

		    
			
			<div class="method-subsection arguments-section parameters">
				<h4 class="method-subtitle parameter-title">Parameters</h4>
				<table class="argument-def parameter-def">
				
					<tr>
						<th scope="row" class="argument-name"><code>collectionNode</code></th>
						<td><p>The sender.</p></td>
					</tr>
				
					<tr>
						<th scope="row" class="argument-name"><code>indexPath</code></th>
						<td><p>The index path of the item.</p></td>
					</tr>
				
				</table>
			</div>
			

			
			<div class="method-subsection return">
				<h4 class="method-subtitle parameter-title">Return Value</h4>
				<p>a block that creates the node for display for this item.
Must be thread-safe (can be called on the main thread or a background
queue) and should not implement reuse (it will be called once per row).</p>
			</div>
			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/collectionNode:nodeForItemAtIndexPath:" title="collectionNode:nodeForItemAtIndexPath:"></a>
	<h3 class="method-title"><code><a href="#//api/name/collectionNode:nodeForItemAtIndexPath:">&ndash;&nbsp;collectionNode:nodeForItemAtIndexPath:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Similar to -collectionView:cellForItemAtIndexPath:.</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (ASCellNode *)collectionNode:(ASCollectionNode *)<em>collectionNode</em> nodeForItemAtIndexPath:(NSIndexPath *)<em>indexPath</em></code></div>

		    
			
			<div class="method-subsection arguments-section parameters">
				<h4 class="method-subtitle parameter-title">Parameters</h4>
				<table class="argument-def parameter-def">
				
					<tr>
						<th scope="row" class="argument-name"><code>indexPath</code></th>
						<td><p>The index path of the item.</p></td>
					</tr>
				
					<tr>
						<th scope="row" class="argument-name"><code>collectionView</code></th>
						<td><p>The sender.</p></td>
					</tr>
				
				</table>
			</div>
			

			
			<div class="method-subsection return">
				<h4 class="method-subtitle parameter-title">Return Value</h4>
				<p>A node to display for the given item. This will be called on the main thread and should
not implement reuse (it will be called once per item).  Unlike UICollectionView&rsquo;s version,
this method is not called when the item is about to display.</p>
			</div>
			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/collectionNode:nodeForSupplementaryElementOfKind:atIndexPath:" title="collectionNode:nodeForSupplementaryElementOfKind:atIndexPath:"></a>
	<h3 class="method-title"><code><a href="#//api/name/collectionNode:nodeForSupplementaryElementOfKind:atIndexPath:">&ndash;&nbsp;collectionNode:nodeForSupplementaryElementOfKind:atIndexPath:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Asks the data source to provide a node to display for the given supplementary element in the collection view.</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (ASCellNode *)collectionNode:(ASCollectionNode *)<em>collectionNode</em> nodeForSupplementaryElementOfKind:(NSString *)<em>kind</em> atIndexPath:(NSIndexPath *)<em>indexPath</em></code></div>

		    
			
			<div class="method-subsection arguments-section parameters">
				<h4 class="method-subtitle parameter-title">Parameters</h4>
				<table class="argument-def parameter-def">
				
					<tr>
						<th scope="row" class="argument-name"><code>collectionNode</code></th>
						<td><p>The sender.</p></td>
					</tr>
				
					<tr>
						<th scope="row" class="argument-name"><code>kind</code></th>
						<td><p>The kind of supplementary element.</p></td>
					</tr>
				
					<tr>
						<th scope="row" class="argument-name"><code>indexPath</code></th>
						<td><p>The index path of the supplementary element.</p></td>
					</tr>
				
				</table>
			</div>
			

			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/collectionNode:contextForSection:" title="collectionNode:contextForSection:"></a>
	<h3 class="method-title"><code><a href="#//api/name/collectionNode:contextForSection:">&ndash;&nbsp;collectionNode:contextForSection:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Asks the data source to provide a context object for the given section. This object
can later be retrieved by calling @c contextForSection: and is useful when implementing
custom @c UICollectionViewLayout subclasses. The context object is ret</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (nullable id&lt;ASSectionContext&gt;)collectionNode:(ASCollectionNode *)<em>collectionNode</em> contextForSection:(NSInteger)<em>section</em></code></div>

		    
			
			<div class="method-subsection arguments-section parameters">
				<h4 class="method-subtitle parameter-title">Parameters</h4>
				<table class="argument-def parameter-def">
				
					<tr>
						<th scope="row" class="argument-name"><code>collectionNode</code></th>
						<td><p>The sender.</p></td>
					</tr>
				
					<tr>
						<th scope="row" class="argument-name"><code>section</code></th>
						<td><p>The index of the section to provide context for.</p></td>
					</tr>
				
				</table>
			</div>
			

			
			<div class="method-subsection return">
				<h4 class="method-subtitle parameter-title">Return Value</h4>
				<p>A context object to assign to the given section, or @c nil.</p>
			</div>
			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/collectionView:nodeForItemAtIndexPath:" title="collectionView:nodeForItemAtIndexPath:"></a>
	<h3 class="method-title"><code><a href="#//api/name/collectionView:nodeForItemAtIndexPath:">&ndash;&nbsp;collectionView:nodeForItemAtIndexPath:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Similar to -collectionView:cellForItemAtIndexPath:.</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (ASCellNode *)collectionView:(ASCollectionView *)<em>collectionView</em> nodeForItemAtIndexPath:(NSIndexPath *)<em>indexPath</em></code></div>

		    
			
			<div class="method-subsection arguments-section parameters">
				<h4 class="method-subtitle parameter-title">Parameters</h4>
				<table class="argument-def parameter-def">
				
					<tr>
						<th scope="row" class="argument-name"><code>collectionView</code></th>
						<td><p>The sender.</p></td>
					</tr>
				
					<tr>
						<th scope="row" class="argument-name"><code>indexPath</code></th>
						<td><p>The index path of the requested node.</p></td>
					</tr>
				
				</table>
			</div>
			

			
			<div class="method-subsection return">
				<h4 class="method-subtitle parameter-title">Return Value</h4>
				<p>a node for display at this indexpath. This will be called on the main thread and should
not implement reuse (it will be called once per row).  Unlike UICollectionView&rsquo;s version,
this method is not called when the row is about to display.</p>
			</div>
			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/collectionView:nodeBlockForItemAtIndexPath:" title="collectionView:nodeBlockForItemAtIndexPath:"></a>
	<h3 class="method-title"><code><a href="#//api/name/collectionView:nodeBlockForItemAtIndexPath:">&ndash;&nbsp;collectionView:nodeBlockForItemAtIndexPath:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Similar to -collectionView:nodeForItemAtIndexPath:
This method takes precedence over collectionView:nodeForItemAtIndexPath: if implemented.</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (ASCellNodeBlock)collectionView:(ASCollectionView *)<em>collectionView</em> nodeBlockForItemAtIndexPath:(NSIndexPath *)<em>indexPath</em></code></div>

		    
			
			<div class="method-subsection arguments-section parameters">
				<h4 class="method-subtitle parameter-title">Parameters</h4>
				<table class="argument-def parameter-def">
				
					<tr>
						<th scope="row" class="argument-name"><code>collectionView</code></th>
						<td><p>The sender.</p></td>
					</tr>
				
					<tr>
						<th scope="row" class="argument-name"><code>indexPath</code></th>
						<td><p>The index path of the requested node.</p></td>
					</tr>
				
				</table>
			</div>
			

			
			<div class="method-subsection return">
				<h4 class="method-subtitle parameter-title">Return Value</h4>
				<p>a block that creates the node for display at this indexpath.
Must be thread-safe (can be called on the main thread or a background
queue) and should not implement reuse (it will be called once per row).</p>
			</div>
			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/collectionView:nodeForSupplementaryElementOfKind:atIndexPath:" title="collectionView:nodeForSupplementaryElementOfKind:atIndexPath:"></a>
	<h3 class="method-title"><code><a href="#//api/name/collectionView:nodeForSupplementaryElementOfKind:atIndexPath:">&ndash;&nbsp;collectionView:nodeForSupplementaryElementOfKind:atIndexPath:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Asks the collection view to provide a supplementary node to display in the collection view.</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (ASCellNode *)collectionView:(ASCollectionView *)<em>collectionView</em> nodeForSupplementaryElementOfKind:(NSString *)<em>kind</em> atIndexPath:(NSIndexPath *)<em>indexPath</em></code></div>

		    
			
			<div class="method-subsection arguments-section parameters">
				<h4 class="method-subtitle parameter-title">Parameters</h4>
				<table class="argument-def parameter-def">
				
					<tr>
						<th scope="row" class="argument-name"><code>collectionView</code></th>
						<td><p>An object representing the collection view requesting this information.</p></td>
					</tr>
				
					<tr>
						<th scope="row" class="argument-name"><code>kind</code></th>
						<td><p>The kind of supplementary node to provide.</p></td>
					</tr>
				
					<tr>
						<th scope="row" class="argument-name"><code>indexPath</code></th>
						<td><p>The index path that specifies the location of the new supplementary node.</p></td>
					</tr>
				
				</table>
			</div>
			

			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/collectionViewLockDataSource:" title="collectionViewLockDataSource:"></a>
	<h3 class="method-title"><code><a href="#//api/name/collectionViewLockDataSource:">&ndash;&nbsp;collectionViewLockDataSource:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Indicator to lock the data source for data fetching in async mode.
We should not update the data source until the data source has been unlocked. Otherwise, it will incur data inconsistency or exception
due to the data access in async mode. (<b class="deprecated">Deprecated:</b><span class="deprecated"> The data source is always accessed on the main thread, and this method will not be called.</span>)</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (void)collectionViewLockDataSource:(ASCollectionView *)<em>collectionView</em></code></div>

		    
			
			<div class="method-subsection arguments-section parameters">
				<h4 class="method-subtitle parameter-title">Parameters</h4>
				<table class="argument-def parameter-def">
				
					<tr>
						<th scope="row" class="argument-name"><code>collectionView</code></th>
						<td><p>The sender.</p></td>
					</tr>
				
				</table>
			</div>
			

			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/collectionViewUnlockDataSource:" title="collectionViewUnlockDataSource:"></a>
	<h3 class="method-title"><code><a href="#//api/name/collectionViewUnlockDataSource:">&ndash;&nbsp;collectionViewUnlockDataSource:</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Indicator to unlock the data source for data fetching in async mode.
We should not update the data source until the data source has been unlocked. Otherwise, it will incur data inconsistency or exception
due to the data access in async mode. (<b class="deprecated">Deprecated:</b><span class="deprecated"> The data source is always accessed on the main thread, and this method will not be called.</span>)</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>- (void)collectionViewUnlockDataSource:(ASCollectionView *)<em>collectionView</em></code></div>

		    
			
			<div class="method-subsection arguments-section parameters">
				<h4 class="method-subtitle parameter-title">Parameters</h4>
				<table class="argument-def parameter-def">
				
					<tr>
						<th scope="row" class="argument-name"><code>collectionView</code></th>
						<td><p>The sender.</p></td>
					</tr>
				
				</table>
			</div>
			

			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">ASCollectionNode.h</code></p>
			</div>
			
			
		</div>
	</div>
</div>
						</div>
						
					</div>
					
					

                    
                    
          
				</main>

				<footer>
					<div class="footer-copyright">
						
						<p class="copyright">Copyright &copy; 2016 AsyncDisplayKit. All rights reserved. Updated: 2016-11-05</p>
						
						
						<p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p>
						
					</div>
				</footer>
			</div>
		</div>
	</article>

	<script src="../js/script.js"></script>
</body>
</html>